package bbs.web.control;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;

import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.*;    

import bbs.BbsObject; 
import bbs.tran.BbsSystem;

public abstract class WebController extends BbsObject {
	
	/**
	 * Log4j logger
	 */
	static final Logger logger = LogManager.getLogger(WebController.class);
	
	/**
	 * 게시판 시스템
	 * 오라클과 트랜젝션 기능을 제공한다.
	 */
	protected BbsSystem bbsSystem = BbsSystem.getBbsSystem();
	
	

	/**
	 * 관리자 모드.
	 */
	public WebController() {
		
	}
	
	public boolean isForcedUserLoginAtFirst() {
		return this.bbsSystem.isForcedUserLoginAtFirst();
	}
	
	/**
	 * 관리자 모드 로그인 여부
	 * 세션값에 isAdmin 속성이 true 이면 관리자이다.
	 * @param request
	 * @return
	 */
	public boolean isAdminOnTheSession( HttpServletRequest request ) {
		Object o = request.getSession().getAttribute( "isAdmin" );
		if( o instanceof Boolean ) {
			return (((Boolean) o).booleanValue()) == true;
		}
		return false;		
	}
	
	/**
	 * 관리자 설정을 세션레벨에 한다.
	 * @param request
	 */
	public void loginAdminOnTheSession( HttpServletRequest request ) {
		request.getSession().setAttribute( "isAdmin", true );
	}
	
	/**
	 * 관리자 모드를 로그아웃한다.
	 * @param request
	 */
	public void logoutAdminOnTheSession( HttpServletRequest request ) {
		request.getSession().removeAttribute( "isAdmin" );
	} 
	
	/**
	 * SQL 세션 체크 
	 * @return
	 */
	private SqlSession getSqlSession() {		
		return this.bbsSystem.getSqlSession();
	}
	
	/**
	 * URL Decoding 문자열 반환
	 * @param s
	 * @return
	 */
	public static String getStringUrlDecoded( String s ) { 
		try {
			return URLDecoder.decode( s, "UTF-8" ) ;
		} catch ( Exception e ) { 
			logger.trace( e );
		}
		return s; 
	}
	
	/**
	 * URL 인코딩 문자열 반환
	 * @param s
	 * @return
	 */
	public static String getStringUrlEncoded( String s ) {
		try {
			return URLEncoder.encode( s, "UTF-8" );
		} catch (UnsupportedEncodingException e) {
			logger.trace( e );
		}
		return s;
	}
	
	/**
	 * 쿼리 문자열을 포함하는 요청 URL 을 반환한다.
	 * @param request
	 * @return
	 */
	public String getReqUrlFull( HttpServletRequest request ) {
		
		return (String) request.getAttribute( "reqUrlFull" );
	}

}